﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>WinGetText</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>WinGetText</h1>

<p>返回匹配指定条件的窗口中的文本。</p>

<p class="CommandSyntax">WinGetText, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr>
    <td width="15%">OutputVar</td>
    <td width="85%">输出变量，存储获取的文本。</td>
  </tr>
  <tr>
    <td>WinTitle</td>
    <td>目标窗口的标题或标题中的部分文字（匹配模式由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定）。如果省略其它 3 个参数，默认目标是 <a href="../LastFoundWindow.htm">上一次匹配窗口</a> 。如果这个参数使用字母 A ，同时省略其它 3 个参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 <em>ahk_class 精确 class 名</em>（Window Spy 中可以显示 class 名）。要用窗口的 <a href="Process.htm">进程标识符（PID）</a>进行匹配，使用 <em>ahk_pid %PID变量%</em> 。要用 <a href="GroupAdd.htm">窗口组</a> ，使用 <em>ahk_group 组名</em> 。要用窗口的 <a href="WinGet.htm">唯一 ID</a> 进行匹配，使用 <em>ahk_id %ID变量%</em> 。要减小检测范围，使用 <a href="../LastFoundWindow.htm#multi">多重条件</a> ，例如：<em>My File.txt ahk_class Notepad</em></td>
  </tr>
  <tr>
    <td>WinText</td>
    <td>如果使用这个参数，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 <a href="DetectHiddenText.htm">DetectHiddenText</a> 设置为 ON 的时候才能检测到。</td>
  </tr>
  <tr>
    <td>ExcludeTitle</td>
    <td>标题中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
  <tr>
    <td>ExcludeText</td>
    <td>文本元素中包含该参数指定的文字的窗口将被除外。</td>
  </tr>
</table>

<h3>ErrorLevel</h3>
<p>如果出现错误，<a href="../misc/ErrorLevel.htm">ErrorLevel/错误级别</a> 设置为 1 ，否则为 0 。</p>
<h3>注意</h3>
<p>一般情况下，返回的文本和 Window Spy 中显示的一样。但是，如果 <a href="DetectHiddenText.htm">DetectHiddenText</a> 为关闭状态，则不能获取隐藏文本。</p>
<p>每个获取的文本元素之后都跟着一个回车和一个换行符（CR+LF），在脚本中用 `r`n 表示。要将返回值分解为单行文本或从中提取子字符串，使用 <a href="StringGetPos.htm">StringGetPos</a> 和 <a href="StringMid.htm">StringMid</a> 这样的命令。也可以使用 <a href="LoopParse.htm">parsing loop</a> 来单独检查每行文本或每个单词。</p>
<p>如果获取的文本不完整，尝试一下在 WinGetText 之前使用 <a href="VarSetCapacity.htm">VarSetCapacity(OutputVar, 55)</a> （将 55 替换为大于窗口文本的大小）。有时候这是很有必要的，因为有些应用程序的窗口不会正确响应 WM_GETTEXTLENGTH 消息，导致 AutoHotkey 将输出变量设置过小，无法存储所有的窗口文本。</p>
<p>能够获取的文本数量取决于变量的最大容量（可以使用 <a href="_MaxMem.htm">#MaxMem</a> 设置）。因此，当一个窗口包含大量文本（例如打开了一个大文档的记事本）的时候，这个命令可能会消耗大量的内存。要避免这种情况，使用 <a href="ControlGetText.htm">ControlGetText</a> 来获取窗口的部分文本。在任何时候，一个变量可以通过指向空值来释放它所占用的内存，例如 OutputVar =</p>
<p>Windows 95/98/ME 中可能会限制窗口中的每个文本元素大小不超过 64 KB 。</p>
<p>要获取窗口中的控件列表，使用：<a href="WinGet.htm">WinGet</a>, OutputVar, ControlList, WinTitle</p>
<p>窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口，必须打开 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 。</p>

<h3>相关命令</h3>
<p><a href="ControlGetText.htm">ControlGetText</a>, <a href="WinGetActiveStats.htm">WinGetActiveStats</a>, <a href="WinGetActiveTitle.htm">WinGetActiveTitle</a>, <a href="WinGetTitle.htm">WinGetTitle</a>, <a href="WinGetPos.htm">WinGetPos</a>, <a href="_MaxMem.htm">#MaxMem</a></p>
<h3>示例</h3>
<pre class="NoIndent">Run, Calc.exe
WinWait, Calculator
WinGetText, text  <em>; 使用上面找到的窗口</em>
MsgBox, The text is:`n%text%</pre>

</body>
</html>
